package learn;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 动态代理处理器工具
 * @author darking
 *
 */
public class DynamicProxyHandler implements InvocationHandler {
	
	private Object proxyedObject;	//被代理对象
	
	private InterceptorClass intercepterCalzz = new InterceptorClass();
	
	/**
	　　* 动态生成一个代理类对象,并绑定被代理类和代理处理器
	　　*
	　　* @param business
	　　* @return 代理类对象
	　　*/
	public Object bind(Object business) {
		this.proxyedObject = business;
		return Proxy.newProxyInstance(
				business.getClass().getClassLoader(), 
				business.getClass().getInterfaces(), 
				this);
	}
    /**
　　* 代理要调用的方法,并在方法调用前后调用连接器的方法.
　　*
　　* @param proxy 代理类对象
　　* @param method 被代理的接口方法
　　* @param args 被代理接口方法的参数
　　* @return 方法调用返回的结果
　　* @throws Throwable
　　*/
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;
		intercepterCalzz.before();
		
		result = method.invoke(proxyedObject, args);
		intercepterCalzz.after();
		return result;
	}

}
